package com.qqclient.serivce;

import com.qqcommon.Message;
import com.qqcommon.MessageType;
import com.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

/**
 * 用于向服务端验证用户Id和密码的服务
 */
public class UserClientService {
    Scanner scanner = new Scanner(System.in);
    private User u = new User();
    //因为Socket在其他地方也可能使用，因此作出属性
    private Socket socket;

    //对用户Id和密码进行验证
    public boolean checkUser(String userId, String pwd){
        boolean b = false;
        //创建User对象
        u.setUserId(userId);
        u.setPasswd(pwd);
        //连接服务端发送u对象
        try {
            socket = new Socket(InetAddress.getByName("127.0.0.1"),9999);
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(u);

            //读取从服务器返回的Message对象
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //如果没有接收到发送的消息会阻塞在这里
            Message ms = (Message) ois.readObject();

            if (ms.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){//登陆成功
                //创建客户端和服务端的socket通信连接
                ClientConnectServerThread clientConnectServerThread = new ClientConnectServerThread(socket);
                //启动ClientConnectServerThread线程
                clientConnectServerThread.start();
                //为了方便管理多个线程及后面客户端的扩展，将线程放入一个集合中
                ManageClientConnectServerThread.addClientConnectServerThread(userId,clientConnectServerThread);
                b = true;
            }else {
                //登录失败，不用启动通信线程，需要关闭原有socket
                socket.close();

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return b;
    }

    //拉取当前在线用户列表
    public void onlineFriendList(){
        //发送一个Message对象
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);//设置消息类型

        //发送给服务器
        try {
            //从管理线程的集合中得到当前用户的通信线程，然后载得到socket，获取getOutputStream输出流
            ObjectOutputStream oos = new ObjectOutputStream
                    (ManageClientConnectServerThread.getClientConnectServerThread(u.getUserId()).getSocket().getOutputStream());
            //向服务端发送消息,索要用户在线列表
            message.setSender(u.getUserId());//消息对象中写入发送者
            oos.writeObject(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //私聊
    public void chat(){
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_COMM_MES);
        try {
            ObjectOutputStream oos = new ObjectOutputStream
                    (ManageClientConnectServerThread.getClientConnectServerThread(u.getUserId()).getSocket().getOutputStream());
            message.setSender(u.getUserId());
            //写入接收者
            System.out.print("私聊对象：");
            String s = scanner.next();
            message.setGetter(s);
            //发送内容写入消息message对象中
            System.out.print(u.getUserId()+"：");
            String c = scanner.next();
            message.setContent(c);
            //发送消息对象
            oos.writeObject(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //编写方法退出客户端，并给服务端发送一个退出系统的message对象
    public void exit(){
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_CLIENT_EXIT);//退出消息类型

        try {
            ObjectOutputStream oos = new ObjectOutputStream
                    (ManageClientConnectServerThread.getClientConnectServerThread(u.getUserId()).getSocket().getOutputStream());
            message.setSender(u.getUserId());
            oos.writeObject(message);
            System.exit(0);//结束进程
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
